package com.atguigu.common.exception;

import com.atguigu.common.result.R;
import com.atguigu.common.result.ResponseEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author: Luckyh
 * @date : 2022/1/27 21:19
 */
@RestControllerAdvice // 统一异常处理的注解
@Slf4j
public class UnifiedExceptionHandler {

    /**
     *  只要程序中出现异常，就会走到这个类中，进行异常捕获
     * @param e 异常
     * @return 返回统一结果
     */
    @ExceptionHandler(value = Exception.class)
    public R exceptionHandler(Exception e){
        log.error(e.getMessage(),e);
        return R.error();
    }

    /**
     *  处理sql语法错误的异常
     * @param e sql错误异常
     * @return 统一返回结果
     */
    @ExceptionHandler(value = BadSqlGrammarException.class)
    public R exceptionHandler(BadSqlGrammarException e){
        log.error(e.getMessage(),e);
        return R.setResult(ResponseEnum.BAD_SQL_GRAMMAR_ERROR);
    }

    /**
     *  统一异常捕获 （自定义）
     * @param e 异常对象
     * @return 统一返回结果
     */
    @ExceptionHandler(value = BusinessException.class)
    public R exceptionHandler(BusinessException e){
        log.error(e.getMessage(),e);
        return R.setResult(ResponseEnum.BAD_SQL_GRAMMAR_ERROR).message(e.getMessage()).code(e.getCode());
    }
}
